package com.inei.evaluaciondelaencuesta.view;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import com.inei.evaluaciondelaencuesta.R;
import com.inei.evaluaciondelaencuesta.controller.RespuestaEncuestaController;
import com.inei.evaluaciondelaencuesta.model.entity.RespuestaEncuesta;
import com.inei.evaluaciondelaencuesta.tools.Manejo;
import com.inei.evaluaciondelaencuesta.tools.SpinnerUtil;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TimePicker;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class Encuesta_XI_Activity extends Activity {

	// Capitulo XI
	Spinner spErrorC11;
	EditText etOBSC11, etHIC11, etHTC11, etTC11;
	RadioButton rbSiC11, rbNoC11;

	// Capitulo XI Pregunta 162
	Spinner spLectura162, spComprension162, spOtro162, spError162;
	EditText etOtro162, etPregunta162, etOBS162;
	// Capitulo XI Pregunta 171
	Spinner spLectura171, spComprension171, spOtro171, spError171;
	EditText etOtro171, etPregunta171, etOBS171;
	// Capitulo XI Pregunta 172
	Spinner spLectura172, spComprension172, spOtro172, spError172;
	EditText etOtro172, etPregunta172, etOBS172;

	// variable componentes
	private EditText[] et;
	private SpinnerUtil util;

	// variables
	private RespuestaEncuestaController con;
	private List<RespuestaEncuesta> lista;
	private int marco_id, formato_id, codPer;
	private String conglomerado, grupo, vivienda, hogar_id;
	private Manejo manejo;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_encuesta_xi);

		con = new RespuestaEncuestaController(this);
		util = new SpinnerUtil(this);

		IniciarComponentes();

		AgregarEventos();

		CargarDatos();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.encuesta_i, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.mnGuardar:
			GuardarDatos();
			if (lista.get(0).getRespuesta_id() > 0) {
				if (con.RespuestaEncuestaModificar(lista) > 0) {
					Intent ir_encuesta_persona = new Intent(this,
							Encuesta_Persona_Activity.class);
					Bundle datos = getIntent().getExtras();
					datos.putInt("viene", 11);
					ir_encuesta_persona.putExtras(datos);
					startActivity(ir_encuesta_persona);

					Toast.makeText(this, "Se actualizo con exito",
							Toast.LENGTH_SHORT).show();
					finish();
				} else {
					Toast.makeText(this, "Error al actualizar",
							Toast.LENGTH_SHORT).show();
				}
			} else {
				if (con.RespuestaEncuestaAdicionar(lista) > 0) {
					Intent ir_encuesta_persona = new Intent(this,
							Encuesta_Persona_Activity.class);
					Bundle datos = getIntent().getExtras();
					datos.putInt("viene", 11);
					ir_encuesta_persona.putExtras(datos);
					startActivity(ir_encuesta_persona);

					Toast.makeText(this, "Se guardo con exito",
							Toast.LENGTH_SHORT).show();
					finish();
				} else {
					Toast.makeText(this, "Error al guardar", Toast.LENGTH_SHORT)
							.show();
				}
			}
			break;
		case R.id.mnSalir:
			finish();
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public void onBackPressed() {
		Intent ir_encuesta = new Intent(this, Encuesta_Persona_Activity.class);
		Bundle datos = getIntent().getExtras();
		ir_encuesta.putExtras(datos);
		startActivity(ir_encuesta);
		finish();

		super.onBackPressed();
	}

	private void CargarDatos() {
		marco_id = getIntent().getExtras().getInt("marco_id");
		formato_id = getIntent().getExtras().getInt("formato_id");
		conglomerado = getIntent().getExtras().getString("conglomerado");
		grupo = getIntent().getExtras().getString("grupo");
		vivienda = getIntent().getExtras().getString("vivienda");
		hogar_id = getIntent().getExtras().getString("hogar_id");
		codPer = getIntent().getExtras().getInt("codPer");

		lista = con.RespuestaEncuestaBuscarPersona11(marco_id, formato_id,
				codPer, hogar_id);

		if (lista != null) {

			manejo = new Manejo(lista);

			// Capitulo XI
			spErrorC11
					.setSelection(Integer.parseInt(lista.get(0).getP_ERROR()));
			etOBSC11.setText(lista.get(0).getP_OBS());
			if (lista.get(0).getP_IH() != null
					&& lista.get(0).getP_IM() != null) {
				etHIC11.setText(lista.get(0).getP_IH() + ":"
						+ lista.get(0).getP_IM());
			}

			if (lista.get(0).getP_FH() != null
					&& lista.get(0).getP_FM() != null) {
				etHTC11.setText(lista.get(0).getP_FH() + ":"
						+ lista.get(0).getP_FM());
			}
			etTC11.setText(lista.get(0).getP_TM() + "");

			if (lista.get(0).getP_DIREC() != null) {
				if (!lista.get(0).getP_DIREC().equals("0")) {
					rbSiC11.setChecked(isChecked(lista.get(0).getP_DIREC(), "1"));
					rbNoC11.setChecked(isChecked(lista.get(0).getP_DIREC(), "2"));
				}
			}

			manejo.CargarPregunta(1, spLectura162, spComprension162, spOtro162,
					etOtro162, etPregunta162, spError162, etOBS162);

			manejo.CargarPregunta(2, spLectura171, spComprension171, spOtro171,
					etOtro171, etPregunta171, spError171, etOBS171);

			manejo.CargarPregunta(3, spLectura172, spComprension172, spOtro172,
					etOtro172, etPregunta172, spError172, etOBS172);
		}
	}

	private void AgregarEventos() {
		setEt(etOtro162, etOtro171, etOtro172);
		accionOtro(spOtro162, spOtro171, spOtro172);
		etHIC11.setFocusable(false);
		etHIC11.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});

		etHTC11.setFocusable(false);
		etHTC11.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				EditText et = (EditText) v;
				AbrirTime(et.getText().toString(), et, 0, "");
			}
		});
	}

	private void IniciarComponentes() {
		// Capitulo XII
		spErrorC11 = (Spinner) findViewById(R.id.spErrorC11);
		etOBSC11 = (EditText) findViewById(R.id.etOBSC11);
		etHIC11 = (EditText) findViewById(R.id.etHIC11);
		etHTC11 = (EditText) findViewById(R.id.etHTC11);
		etTC11 = (EditText) findViewById(R.id.etTC11);
		rbSiC11 = (RadioButton) findViewById(R.id.rbSiC11);
		rbNoC11 = (RadioButton) findViewById(R.id.rbNoC11);

		// Capitulo IX Pregunta 162
		spLectura162 = (Spinner) findViewById(R.id.spLectura162);
		spComprension162 = (Spinner) findViewById(R.id.spComprension162);
		spOtro162 = (Spinner) findViewById(R.id.spOtro162);
		etOtro162 = (EditText) findViewById(R.id.etOtro162);
		ocultar(etOtro162);
		etPregunta162 = (EditText) findViewById(R.id.etPregunta162);
		spError162 = (Spinner) findViewById(R.id.spError162);
		etOBS162 = (EditText) findViewById(R.id.etOBS162);
		// Capitulo IX Pregunta 171
		spLectura171 = (Spinner) findViewById(R.id.spLectura171);
		spComprension171 = (Spinner) findViewById(R.id.spComprension171);
		spOtro171 = (Spinner) findViewById(R.id.spOtro171);
		etOtro171 = (EditText) findViewById(R.id.etOtro171);
		ocultar(etOtro171);
		etPregunta171 = (EditText) findViewById(R.id.etPregunta171);
		spError171 = (Spinner) findViewById(R.id.spError171);
		etOBS171 = (EditText) findViewById(R.id.etOBS171);
		// Capitulo IX Pregunta 172
		spLectura172 = (Spinner) findViewById(R.id.spLectura172);
		spComprension172 = (Spinner) findViewById(R.id.spComprension172);
		spOtro172 = (Spinner) findViewById(R.id.spOtro172);
		etOtro172 = (EditText) findViewById(R.id.etOtro172);
		ocultar(etOtro172);
		etPregunta172 = (EditText) findViewById(R.id.etPregunta172);
		spError172 = (Spinner) findViewById(R.id.spError172);
		etOBS172 = (EditText) findViewById(R.id.etOBS172);

		util.spinnerLECTURA(spLectura162, spLectura171, spLectura172);

		util.spinnerCOMPRENSION(spComprension162, spComprension171,
				spComprension172);

		util.spinnerOTROS(spOtro162, spOtro171, spOtro172);

		util.spinnerERRORES(spErrorC11, spError162, spError171, spError172);
	}

	private void GuardarDatos() {
		if (lista == null) {
			lista = new ArrayList<RespuestaEncuesta>();
			for (int i = 0; i < 4; i++) {
				RespuestaEncuesta x = new RespuestaEncuesta();
				x.setFormato_id(formato_id);
				x.setMarco_id(marco_id);
				x.setConglomerado(conglomerado);
				x.setGrupo(grupo);
				x.setVivienda(vivienda);
				x.setHogar(hogar_id);
				x.setTipo_reg("1");
				x.setOrden("" + codPer);
				x.setCap("11");
				lista.add(x);
			}
			lista.get(0).setTipo("1");
			lista.get(0).setCodigo("");
		}

		manejo = new Manejo(lista);

		// Capitulo XI
		lista.get(0).setP_ERROR(spErrorC11.getSelectedItemPosition() + "");
		lista.get(0).setP_OBS(etOBSC11.getText().toString());
		if (etHIC11.getText().toString().length() != 0) {
			String[] iC11 = etHIC11.getText().toString().split(":");
			lista.get(0).setP_IH(iC11[0]);
			lista.get(0).setP_IM(iC11[1]);
		} else {
			lista.get(0).setP_IH(null);
			lista.get(0).setP_IM(null);
		}
		if (etHTC11.getText().toString().length() != 0) {
			String[] iC11 = etHTC11.getText().toString().split(":");
			lista.get(0).setP_FH(iC11[0]);
			lista.get(0).setP_FM(iC11[1]);
		} else {
			lista.get(0).setP_FH(null);
			lista.get(0).setP_FM(null);
		}
		lista.get(0).setP_TM(
				etTC11.getText().toString().length() == 0 ? 0 : Integer
						.parseInt(etTC11.getText().toString()));
		lista.get(0).setP_DIREC(
				rbSiC11.isChecked() ? "1" : (rbNoC11.isChecked() ? "2" : "0"));

		manejo.GuardarPregunta(1, "3", "162", spLectura162, spComprension162,
				spOtro162, etOtro162, etPregunta162, spError162, etOBS162);

		manejo.GuardarPregunta(2, "3", "171", spLectura171, spComprension171,
				spOtro171, etOtro171, etPregunta171, spError171, etOBS171);

		manejo.GuardarPregunta(3, "3", "172", spLectura172, spComprension172,
				spOtro172, etOtro172, etPregunta172, spError172, etOBS172);
	}

	private void setEt(EditText... ets) {
		et = ets;
	}

	private EditText obtenerEditText(int pos) {
		return et[pos];
	}

	private void accionOtro(Spinner... spinner) {
		for (int i = 0; i < spinner.length; i++) {
			final int p = i;
			Spinner sp = spinner[i];
			sp.setOnItemSelectedListener(new OnItemSelectedListener() {

				@Override
				public void onItemSelected(AdapterView<?> adapter, View v,
						int pos, long arg3) {
					if (pos == 3) {
						mostrar(obtenerEditText(p));
					} else {
						ocultar(obtenerEditText(p));
					}
				}

				@Override
				public void onNothingSelected(AdapterView<?> adapter) {

				}
			});
		}
	}

	private boolean isChecked(String ind, String i) {
		return ind.equals(i) ? true : false;
	}

	private void mostrar(EditText et) {
		et.setVisibility(View.VISIBLE);
	}

	private void ocultar(EditText et) {
		et.setVisibility(View.GONE);
		et.setText("");
	}

	private void AbrirTime(String h, final EditText et, final int sw,
			final String h1) {

		final Calendar c = Calendar.getInstance();
		int horas = c.get(Calendar.HOUR_OF_DAY);
		int minutos = c.get(Calendar.MINUTE);
		if (h.length() != 0) {
			String valores[] = h.split(":");
			horas = Integer.parseInt(valores[0]);
			minutos = Integer.parseInt(valores[1]);
		}

		TimePickerDialog hora = new TimePickerDialog(this,
				new OnTimeSetListener() {

					@Override
					public void onTimeSet(TimePicker view, int hourOfDay,
							int minute) {
						c.set(Calendar.HOUR_OF_DAY, hourOfDay);
						c.set(Calendar.MINUTE, minute);
						SimpleDateFormat sdf = new SimpleDateFormat("HH:mm",
								Locale.US);
						et.setText(sdf.format(c.getTime()));

						if (et == etHIC11 || et == etHTC11) {
							CalcularMinutos(etHIC11, etHTC11, etTC11);
						}
					}
				}, horas, minutos, true);

		hora.setButton(DatePickerDialog.BUTTON_NEUTRAL, "Borrar",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface arg0, int arg1) {
						LimpiarTotales(et);
					}
				});
		hora.show();
	}

	private void CalcularMinutos(EditText eti, EditText ett, EditText tm) {
		int li = eti.getText().toString().length();
		int lt = ett.getText().toString().length();

		if (li != 0 && lt != 0) {
			String inicio = "00/00/0000 " + eti.getText().toString();
			String termino = "00/00/0000 " + ett.getText().toString();
			SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy HH:mm");
			try {
				Date ini = formato.parse(inicio);
				Date ter = formato.parse(termino);
				tm.setText((ter.getTime() - ini.getTime()) / 60000 + "");
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
	}

	private void LimpiarTotales(EditText et) {
		et.setText("");
		if (et == etHIC11 || et == etHTC11) {
			etTC11.setText("");
		}
	}
}
